<?php
namespace Lonicera\core;
use library\render as render;
class Controller{
	private $db;
	private $view;
	protected static $route;
	
	public function __construct(){
		//require_once _ROOT.'library/render/PhpRender.php'; //改进之后使用命名空间和自动加载.所以去掉
		//$this->view = new PhpRender();
		$this->view = new render\PhpRender();
	}
	
	//赋值给模板
	protected function assign($key, $val){
		$this->view->assign($key,$val);//链式调用
		return $this->view;
	}
	
	//调度DB
	public function db($conf = array()){
		if($conf == NULL){
			$conf = $GLOBALS['_config']['db'];
			
		}
		$this->db = Db::getInstance($conf);
		return $this->db; 
		
	}
	
	//渲染视图并输出浏览量
	public function display($file = ""){
		//该功能可以配合使用func_get_arg()和func_get_args()允许用户自定义函数接收可变长度参数列表。
		//func_num_args();//返回这个函数所含的参数 func_get_args();//返回一个数组给$arr
		if(func_num_args() == 0 || $file == NULL){
			$control = self::$route->control;
			$action = self::$route->action;
			$viewFilePath = _ROOT.'app/'.self::$route->group.'/module/view/';
			$viewFilePath .= $control . DIRECTORY_SEPARATOR . $action .'.php';
		}else{
			$viewFilePath = $file.'.php';
			
		}
		$this->view->display($viewFilePath); //直接渲染不需要返回
	}
	
	//获取视图渲染的结果
	public function fetch($file = ""){
		ob_start();
		ob_implicit_flush(0);//正确使用的顺序是：先用ob_flush()，后用flush()。 //这个函数强制每当有输出的时候，即刻把输出发送到浏览器。这样就不需要每次输出（echo）后，都用flush()来发送到浏览器了。
		$this->display($file);
		$contents = ob_get_clean(); //获取当前缓冲区内容并清除当前的输出缓冲
		return $contents;
	}
}
?>